package cl.ccs.migracionbcmc.dao.impl;

import cl.ccs.migracionbcmc.connection.ConnectionFactory;
import cl.ccs.migracionbcmc.dao.UsuarioDao;
import cl.ccs.migracionbcmc.model.Mensaje;
import cl.ccs.migracionbcmc.model.Usuario;


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Types;

import oracle.jdbc.OracleTypes;

public class UsuarioDaoImpl implements UsuarioDao {
    public UsuarioDaoImpl() {
        super();
    }

    /**
     * @param codUsuario
     * @return
     */
    @Override
    public Usuario getInfoUsuario(String codUsuario) {
        Connection conMOL = null;
        ResultSet rs = null;
        Usuario usuario = new Usuario();
        Mensaje mensaje = new Mensaje();
        try {
            conMOL = ConnectionFactory.getConnectionInfocom();
            CallableStatement stmMOL = conMOL.prepareCall("{CALL PKG_USUARIOS.SQ_DatosUsuario(?,?,?,?,?,?,?)}");
            stmMOL.setString(1, codUsuario);
            stmMOL.registerOutParameter(2, Types.VARCHAR); //Nombre
            stmMOL.registerOutParameter(3, Types.NUMERIC); //CCosto
            stmMOL.registerOutParameter(4, Types.VARCHAR); //GlosaCCosto
            stmMOL.registerOutParameter(5, Types.VARCHAR); //empresa
            stmMOL.registerOutParameter(6, Types.VARCHAR); //Mensaje
            stmMOL.registerOutParameter(7, Types.NUMERIC); //Return

            stmMOL.execute();

            if (stmMOL.getInt(7) > 0) {
                System.out.println("ERROR: " + stmMOL.getString(6));
            } else{
                usuario.setNombre(stmMOL.getString(2));
                usuario.setCcosto(stmMOL.getInt(3));
                usuario.setGlosaCCosto(stmMOL.getString(4));
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ConnectionFactory.freeConnection(conMOL);
        }

        return usuario;
    }

    /**
     * @param codUsuario
     * @param oldPassw
     * @param newPassw
     * @return
     */
    @Override
    public Mensaje modificaPassword(String codUsuario, String oldPassw, String newPassw) {
        Connection conMOL = null;
        Mensaje mensaje = new Mensaje();
        try {
            conMOL = ConnectionFactory.getConnectionInfocom();
            CallableStatement stmMOL = conMOL.prepareCall("{CALL PKG_USUARIOS.SU_NVAPASSWORD(?,?,?,?,?)}");
            stmMOL.setString(1, codUsuario);
            stmMOL.setString(2, oldPassw);
            stmMOL.setString(3, newPassw);
            stmMOL.registerOutParameter(4, Types.VARCHAR); //Return
            stmMOL.registerOutParameter(5, Types.NUMERIC); //Mensaje
      
            stmMOL.execute();

            if (stmMOL.getInt(5) > 0) {
                mensaje.setCodigoMensaje(stmMOL.getInt(5));
                mensaje.setMensaje(stmMOL.getString(4));
            } else{
                mensaje.setCodigoMensaje(0);
                mensaje.setMensaje("Password Modificada Satisfactoriamente.");
            }

        } catch (Exception e) {
            e.printStackTrace();
            mensaje.setCodigoMensaje(78000);
            mensaje.setMensaje("Error : " + e.getMessage());
            return mensaje;
        } finally {
            ConnectionFactory.freeConnection(conMOL);
        }
        return mensaje;
    }
}
